#include <bits/stdc++.h>

class Solution {
    typedef struct max_pos{
        int max;
        int pos;
    } mp;
    stack<mp> tem;
public:
    void value(vector<int>& temperatures,int i){
        mp s1;
        s1.max=temperatures[i];
        s1.pos=i;
        tem.push(s1);
    }
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        int i=0;
        vector<int> res(temperatures.size());
        value(temperatures,i);
        int dis=0;
        for(i=1;i<temperatures.size();i++){
            if(temperatures[i]<=tem.top().max){
                value(temperatures,i);
            }
            else{
                while(!tem.empty()&&temperatures[i]>tem.top().max){
                    dis=i-tem.top().pos;
                    res[tem.top().pos]=dis;
                    dis=0;
                    tem.pop();
                }
                value(temperatures,i);
            }
        }
        return res;
    }
};
